From fac38bbac6114a2eb10262703c8de4700e74093c Mon Sep 17 00:00:00 2001 From: "kaf24@firebug.cl.cam.ac.uk" Date: Tue, 29 Mar 2005 10:24:15 +0000 Subject: [PATCH] bitkeeper revision 1.1236.48.1 (42492ccfJI24fmg8lA7JszDuS59bYA) Get rid of more uses of batched mmu interface. Signed-off-by: Keir Fraser --- .../arch/xen/kernel/traps.c | 1 - .../include/asm-xen/desc.h | 11 +-------- .../include/asm-xen/pgalloc.h | 12 ++++------ .../include/asm-xen/pgtable.h | 8 +++---- .../arch/xen/i386/mm/init.c | 7 +++--- .../arch/xen/i386/mm/pgtable.c | 24 +++++++------------ .../include/asm-xen/asm-i386/pgtable-2level.h | 2 -- 7 files changed, 22 insertions(+), 43 deletions(-) diff --git a/linux-2.4.29-xen-sparse/arch/xen/kernel/traps.c b/linux-2.4.29-xen-sparse/arch/xen/kernel/traps.c index f593714e02..ada06dd973 100644 --- a/linux-2.4.29-xen-sparse/arch/xen/kernel/traps.c +++ b/linux-2.4.29-xen-sparse/arch/xen/kernel/traps.c @@ -623,7 +623,6 @@ void __init trap_init(void) set_call_gate(&default_ldt[0],lcall7); set_call_gate(&default_ldt[4],lcall27); __make_page_readonly(&default_ldt[0]); - flush_page_update_queue(); cpu_init(); } diff --git a/linux-2.4.29-xen-sparse/include/asm-xen/desc.h b/linux-2.4.29-xen-sparse/include/asm-xen/desc.h index 33309a9671..7eaacabf22 100644 --- a/linux-2.4.29-xen-sparse/include/asm-xen/desc.h +++ b/linux-2.4.29-xen-sparse/include/asm-xen/desc.h @@ -16,15 +16,6 @@ struct Xgt_desc_struct { extern struct desc_struct default_ldt[]; -static inline void clear_LDT(void) -{ - /* - * NB. We load the default_ldt for lcall7/27 handling on demand, as - * it slows down context switching. Noone uses it anyway. - */ - queue_set_ldt(0, 0); -} - static inline void load_LDT(mm_context_t *pc) { void *segments = pc->ldt; @@ -33,7 +24,7 @@ static inline void load_LDT(mm_context_t *pc) if ( count == 0 ) segments = NULL; - queue_set_ldt((unsigned long)segments, count); + xen_set_ldt((unsigned long)segments, count); } #endif /* __ASSEMBLY__ */ diff --git a/linux-2.4.29-xen-sparse/include/asm-xen/pgalloc.h b/linux-2.4.29-xen-sparse/include/asm-xen/pgalloc.h index 2a0c226c71..3f8f388774 100644 --- a/linux-2.4.29-xen-sparse/include/asm-xen/pgalloc.h +++ b/linux-2.4.29-xen-sparse/include/asm-xen/pgalloc.h @@ -79,8 +79,7 @@ static inline pgd_t *get_pgd_slow(void) init_mm.pgd + USER_PTRS_PER_PGD, (PTRS_PER_PGD - USER_PTRS_PER_PGD) * sizeof(pgd_t)); __make_page_readonly(pgd); - queue_pgd_pin(__pa(pgd)); - flush_page_update_queue(); + xen_pgd_pin(__pa(pgd)); } return pgd; } @@ -110,9 +109,8 @@ static inline void free_pgd_slow(pgd_t *pgd) free_page((unsigned long)__va(pgd_val(pgd[i])-1)); kmem_cache_free(pae_pgd_cachep, pgd); #else - queue_pgd_unpin(__pa(pgd)); + xen_pgd_unpin(__pa(pgd)); __make_page_writable(pgd); - flush_page_update_queue(); free_page((unsigned long)pgd); #endif } @@ -135,8 +133,7 @@ static inline pte_t *pte_alloc_one(struct mm_struct *mm, unsigned long address) { clear_page(pte); __make_page_readonly(pte); - queue_pte_pin(__pa(pte)); - flush_page_update_queue(); + xen_pte_pin(__pa(pte)); } return pte; @@ -155,9 +152,8 @@ static inline pte_t *pte_alloc_one_fast(struct mm_struct *mm, static __inline__ void pte_free_slow(pte_t *pte) { - queue_pte_unpin(__pa(pte)); + xen_pte_unpin(__pa(pte)); __make_page_writable(pte); - flush_page_update_queue(); free_page((unsigned long)pte); } diff --git a/linux-2.4.29-xen-sparse/include/asm-xen/pgtable.h b/linux-2.4.29-xen-sparse/include/asm-xen/pgtable.h index f5a53adc82..19947a9aae 100644 --- a/linux-2.4.29-xen-sparse/include/asm-xen/pgtable.h +++ b/linux-2.4.29-xen-sparse/include/asm-xen/pgtable.h @@ -300,7 +300,7 @@ static inline void __make_page_readonly(void *va) pgd_t *pgd = pgd_offset_k((unsigned long)va); pmd_t *pmd = pmd_offset(pgd, (unsigned long)va); pte_t *pte = pte_offset(pmd, (unsigned long)va); - queue_l1_entry_update(pte, (*(unsigned long *)pte)&~_PAGE_RW); + set_pte(pte, pte_wrprotect(*pte)); } static inline void __make_page_writable(void *va) @@ -308,7 +308,7 @@ static inline void __make_page_writable(void *va) pgd_t *pgd = pgd_offset_k((unsigned long)va); pmd_t *pmd = pmd_offset(pgd, (unsigned long)va); pte_t *pte = pte_offset(pmd, (unsigned long)va); - queue_l1_entry_update(pte, (*(unsigned long *)pte)|_PAGE_RW); + set_pte(pte, pte_mkwrite(*pte)); } static inline void make_page_readonly(void *va) @@ -316,7 +316,7 @@ static inline void make_page_readonly(void *va) pgd_t *pgd = pgd_offset_k((unsigned long)va); pmd_t *pmd = pmd_offset(pgd, (unsigned long)va); pte_t *pte = pte_offset(pmd, (unsigned long)va); - queue_l1_entry_update(pte, (*(unsigned long *)pte)&~_PAGE_RW); + set_pte(pte, pte_wrprotect(*pte)); if ( (unsigned long)va >= VMALLOC_START ) __make_page_readonly(machine_to_virt( *(unsigned long *)pte&PAGE_MASK)); @@ -327,7 +327,7 @@ static inline void make_page_writable(void *va) pgd_t *pgd = pgd_offset_k((unsigned long)va); pmd_t *pmd = pmd_offset(pgd, (unsigned long)va); pte_t *pte = pte_offset(pmd, (unsigned long)va); - queue_l1_entry_update(pte, (*(unsigned long *)pte)|_PAGE_RW); + set_pte(pte, pte_mkwrite(*pte)); if ( (unsigned long)va >= VMALLOC_START ) __make_page_writable(machine_to_virt( *(unsigned long *)pte&PAGE_MASK)); diff --git a/linux-2.6.11-xen-sparse/arch/xen/i386/mm/init.c b/linux-2.6.11-xen-sparse/arch/xen/i386/mm/init.c index f27dc20c7f..fa9aac890e 100644 --- a/linux-2.6.11-xen-sparse/arch/xen/i386/mm/init.c +++ b/linux-2.6.11-xen-sparse/arch/xen/i386/mm/init.c @@ -355,11 +355,12 @@ static void __init pagetable_init (void) */ memcpy(new_pgd, old_pgd, PTRS_PER_PGD_NO_HV*sizeof(pgd_t)); make_page_readonly(new_pgd); - queue_pgd_pin(__pa(new_pgd)); + xen_pgd_pin(__pa(new_pgd)); load_cr3(new_pgd); - queue_pgd_unpin(__pa(old_pgd)); + flush_page_update_queue(); + xen_pgd_unpin(__pa(old_pgd)); make_page_writable(old_pgd); - __flush_tlb_all(); /* implicit flush */ + __flush_tlb_all(); free_bootmem(__pa(old_pgd), PAGE_SIZE); kernel_physical_mapping_init(new_pgd); diff --git a/linux-2.6.11-xen-sparse/arch/xen/i386/mm/pgtable.c b/linux-2.6.11-xen-sparse/arch/xen/i386/mm/pgtable.c index 2682ac5b90..15ad452eb4 100644 --- a/linux-2.6.11-xen-sparse/arch/xen/i386/mm/pgtable.c +++ b/linux-2.6.11-xen-sparse/arch/xen/i386/mm/pgtable.c @@ -193,10 +193,8 @@ void __set_fixmap_ma (enum fixed_addresses idx, unsigned long phys, pgprot_t fla pte_t *pte_alloc_one_kernel(struct mm_struct *mm, unsigned long address) { pte_t *pte = (pte_t *)__get_free_page(GFP_KERNEL|__GFP_REPEAT|__GFP_ZERO); - if (pte) { + if (pte) make_page_readonly(pte); - flush_page_update_queue(); - } return pte; } @@ -208,8 +206,7 @@ void pte_ctor(void *pte, kmem_cache_t *cache, unsigned long unused) clear_page(pte); make_page_readonly(pte); - queue_pte_pin(__pa(pte)); - flush_page_update_queue(); + xen_pte_pin(__pa(pte)); } void pte_dtor(void *pte, kmem_cache_t *cache, unsigned long unused) @@ -217,9 +214,8 @@ void pte_dtor(void *pte, kmem_cache_t *cache, unsigned long unused) struct page *page = virt_to_page(pte); ClearPageForeign(page); - queue_pte_unpin(__pa(pte)); + xen_pte_unpin(__pa(pte)); make_page_writable(pte); - flush_page_update_queue(); } struct page *pte_alloc_one(struct mm_struct *mm, unsigned long address) @@ -316,8 +312,7 @@ void pgd_ctor(void *pgd, kmem_cache_t *cache, unsigned long unused) memset(pgd, 0, USER_PTRS_PER_PGD*sizeof(pgd_t)); out: make_page_readonly(pgd); - queue_pgd_pin(__pa(pgd)); - flush_page_update_queue(); + xen_pgd_pin(__pa(pgd)); } /* never called when PTRS_PER_PMD > 1 */ @@ -325,9 +320,8 @@ void pgd_dtor(void *pgd, kmem_cache_t *cache, unsigned long unused) { unsigned long flags; /* can be called from interrupt context */ - queue_pgd_unpin(__pa(pgd)); + xen_pgd_unpin(__pa(pgd)); make_page_writable(pgd); - flush_page_update_queue(); if (PTRS_PER_PMD > 1) return; @@ -378,7 +372,7 @@ void make_lowmem_page_readonly(void *va) pud_t *pud = pud_offset(pgd, (unsigned long)va); pmd_t *pmd = pmd_offset(pud, (unsigned long)va); pte_t *pte = pte_offset_kernel(pmd, (unsigned long)va); - queue_l1_entry_update(pte, (*(unsigned long *)pte)&~_PAGE_RW); + set_pte(pte, pte_wrprotect(*pte)); } void make_lowmem_page_writable(void *va) @@ -387,7 +381,7 @@ void make_lowmem_page_writable(void *va) pud_t *pud = pud_offset(pgd, (unsigned long)va); pmd_t *pmd = pmd_offset(pud, (unsigned long)va); pte_t *pte = pte_offset_kernel(pmd, (unsigned long)va); - queue_l1_entry_update(pte, (*(unsigned long *)pte)|_PAGE_RW); + set_pte(pte, pte_mkwrite(*pte)); } void make_page_readonly(void *va) @@ -396,7 +390,7 @@ void make_page_readonly(void *va) pud_t *pud = pud_offset(pgd, (unsigned long)va); pmd_t *pmd = pmd_offset(pud, (unsigned long)va); pte_t *pte = pte_offset_kernel(pmd, (unsigned long)va); - queue_l1_entry_update(pte, (*(unsigned long *)pte)&~_PAGE_RW); + set_pte(pte, pte_wrprotect(*pte)); if ( (unsigned long)va >= (unsigned long)high_memory ) { unsigned long phys; @@ -414,7 +408,7 @@ void make_page_writable(void *va) pud_t *pud = pud_offset(pgd, (unsigned long)va); pmd_t *pmd = pmd_offset(pud, (unsigned long)va); pte_t *pte = pte_offset_kernel(pmd, (unsigned long)va); - queue_l1_entry_update(pte, (*(unsigned long *)pte)|_PAGE_RW); + set_pte(pte, pte_mkwrite(*pte)); if ( (unsigned long)va >= (unsigned long)high_memory ) { unsigned long phys; diff --git a/linux-2.6.11-xen-sparse/include/asm-xen/asm-i386/pgtable-2level.h b/linux-2.6.11-xen-sparse/include/asm-xen/asm-i386/pgtable-2level.h index d35d1c00e3..33ded533b2 100644 --- a/linux-2.6.11-xen-sparse/include/asm-xen/asm-i386/pgtable-2level.h +++ b/linux-2.6.11-xen-sparse/include/asm-xen/asm-i386/pgtable-2level.h @@ -16,8 +16,6 @@ #define set_pte(pteptr, pteval) (*(pteptr) = pteval) #define set_pte_atomic(pteptr, pteval) set_pte(pteptr,pteval) #define set_pmd(pmdptr, pmdval) xen_l2_entry_update((pmdptr), (pmdval)) -#define set_pte_batched(pteptr, pteval) \ - queue_l1_entry_update(pteptr, (pteval).pte_low) #define ptep_get_and_clear(xp) __pte_ma(xchg(&(xp)->pte_low, 0)) #define pte_same(a, b) ((a).pte_low == (b).pte_low) -- 2.30.2